package com.bdk.middle.common.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;


/**
 * 初始化，检测是否可以运行
 * 
 * @author sp42 frank@ajaxjs.com
 *
 */
public class Version {
	private static Logger logger = LoggerFactory.getLogger(Version.class.getName());

	/**
	 * 是否调试模式（开发模式）
	 */
	public static boolean isDebug;

	/**
	 * 源码磁盘目录
	 */
	public static final String srcFolder = new File(Version.class.getClassLoader().getResource("").getPath()).toString();
	
//	public static final String srcFolder = AbstractScanner.getResourceFilePath(Version.class, "");

	/**
	 * 是否苹果操作系统
	 */
	public static final boolean isMac = System.getProperty("os.name").toLowerCase().contains("mac");

	/**
	 * 是否视窗操作系统
	 */
	public static final boolean isWindows = System.getProperty("os.name").toLowerCase().contains("window");

	/**
	 * 是否 Linux 操作系统
	 */
	public static final boolean isLinux = System.getProperty("os.name").toLowerCase().contains("linux");

	static {
		System.setProperty("user.timezone", "GMT +08");// 设置中国时区

		if (System.getProperty("java.vm.vendor").indexOf("Oracle") == -1
				|| System.getProperty("java.vm.vendor").contains("openJDK")) {
			logger.debug("本框架不支持 OpenJDK!如果你是 Linux 系统，请把自带的 OpenJDK 卸载，改用 Oracle JVM");
			System.exit(1);
		}


		/*
		 * 有两种模式：本地模式和远程模式（自动判断） 返回 true 表示是非 linux 环境，为开发调试的环境，即 isDebug = true； 返回
		 * false 表示在部署的 linux 环境下。 Linux 的为远程模式
		 */
		final String OS = System.getProperty("os.name").toLowerCase();
		isDebug = !(OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0);

	}

	/**
	 * 检测是否 tomcat 以及版本
	 * 
	 * @param serverInfo 字符串如 Tomcat/8
	 */
	public static void tomcatVersionDetect(String serverInfo) {
		String result = CommonUtil.regMatch("(?<=Tomcat/)(\\d)", serverInfo);

		if (result != null) {
			try {
				if (Integer.parseInt(result) < 8)
					throw new UnsupportedOperationException("不支持低于 Tomcat 8 以下的版本！");
			} catch (Throwable e) {
				if (e instanceof UnsupportedOperationException)
					throw e;

				logger.debug(e.getMessage());// 忽略其他异常，如正则的
			}
		} else {
			// 不是 tomcat
		}
	}
}
